from django.http import HttpResponse, JsonResponse
from django.shortcuts import render, reverse
from myadmin import models


# Create your views here.

# 分类首页
def index(request):
    # 获取图书分类内容
    # type_data = models.bookshop_types.objects.all()
    # 把数据分配到模板页面中
    # 原来是 select * from myadmin_bookshop_types;
    # content = {'type_data': type_data}

    # 这里需要做排序
    # 排行需要改成 select *,concat(path,id) as paths from myadmin_bookshop_types order by paths;
    type_data = models.bookshop_types.objects.extra(select={'paths': 'concat(path,id)'}).order_by('paths')

    # 增加子分类的缩进
    '''
    name 分类名
    pid  父级分类
    path 分类路径
    id    name   pid    path
    1     教育    0      0，
    2     大学    1      0，1，
    3     数学    2      0，1，2，
    
    跟进path中的逗号-1，来增加分类：
    教育 1-1 = 0
    大学 2-1 = 1
    '''
    formattype(type_data)

    content = {'type_data': type_data}
    # 加载模板文件
    return render(request, 'myadmin/types/list.html', content)


# 分类数据统计，被 图书商品页 调用
def get_type_all():
    type_data = models.bookshop_types.objects.extra(select={'paths': 'concat(path,id)'}).order_by('paths')
    formattype(type_data)
    return type_data


# 分类添加
def addtype(request):
    # 如果方法是post，则接受表单数据，并提交；否则返回书籍添加页面。
    if request.method == 'POST':
        type_data = request.POST.dict()
        type_data.pop("csrfmiddlewaretoken")
        print(type_data)

        '''
        name 分类名
        pid  父级分类
        path 分类路径
        id    name   pid    path
        1     教育    0      0，
        2     大学    1      0，1，
        3     数学    2      0，1，2，
        '''

        # 定义path字段，需要判断当前添加的分类是否是顶级分类
        if type_data['pid'] == '0':
            # 如果是顶级分类
            type_data['path'] = '0,'
        else:
            # 如果不是顶级
            # 需要查询父类id的path
            path = models.bookshop_types.objects.get(id=type_data['pid']).path
            type_data['path'] = path + type_data['pid'] + ','
            pass

        # 执行数据添加
        try:
            obj = models.bookshop_types(**type_data)
            obj.save()

            url = reverse(index)
            return HttpResponse('<script>alert("成功了");location.href="' + url + '";</script>')
        except:
            url = reverse(addtype)
            return HttpResponse('<script>alert("失败了");location.href="' + url + '";</script>')
    else:
        # 如果是GET请求
        type_data = models.bookshop_types.objects.extra(select={'paths': 'concat(path,id)'}).order_by('paths')

        # 这里是给分类添加缩进
        formattype(type_data)

        content = {'type_data': type_data}
        return render(request, 'myadmin/types/add.html', content)


def formattype(type_data):
    for i in type_data:
        n = i.path.count(',') - 1
        # 增加一个对象属性，用来作为缩进
        i.sj = '|---' * n
        # 增加一个对象属性，用来识别父级分类
        if i.pid != 0:
            i.pname = models.bookshop_types.objects.get(id=i.pid).name
    return type_data


def edittype(request):
    try:
        id = request.GET.get('id')
        name = request.GET.get('name')
        obj = models.bookshop_types.objects.get(id=id)
        obj.name = name
        obj.save()
        return JsonResponse({'code': 0, 'msg': '更新成功'})
    except:
        return JsonResponse({'code': 1, 'msg': '更新失败'})


def deltype(request):
    # 获取分类的id
    id = request.GET.get('id')

    # 判断当前类下是否还有子类
    # 方法，看pid是否有自己的id
    num = models.bookshop_types.objects.filter(pid=id).count()
    if num:
        # 有子类，不能删除
        return JsonResponse({'code': 1, 'msg': '当前类下还有子类，不能删除'})

    # 判断当前类下是否还有商品

    try:
        # 删除类
        obj = models.bookshop_types.objects.get(id=id)
        obj.delete()
        return JsonResponse({'code': 0, 'msg': '删除成功'})
    except:
        return JsonResponse({'code': 3, 'msg': '删除失败'})
